/*
 * @Author: LiZhiJian
 * @Description: 
 * @Date: 2025-10-28 16:49:37
 * @LastEditTime: 2025-10-30 13:32:45
 * @Email: LiZhiJian8552@163.com
 */
#include "hongwai.h"
#include "movement.h"
#include "delay.h"

// 用于存储红外信号
// TODO extern?
extern uint8_t t1;  // 前
extern uint8_t t2;  // 后
extern uint8_t t3;  // 左
extern uint8_t t4;  // 右


void hongwai_Init(void){
    // 红外初始化 输入引脚下拉输入,使用PA4 PA5 PA11 PA12

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
    // 引脚初始化
    GPIO_InitTypeDef GPIO_InitStruct={0};
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_11|GPIO_Pin_12;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
    GPIO_Init(GPIOA,&GPIO_InitStruct);

    // 输入低电平,表示有障碍物,因为是边沿检测,到没有障碍物时表示快掉下去了
    GPIO_ResetBits(GPIOA,GPIO_Pin_4);
    GPIO_ResetBits(GPIOA,GPIO_Pin_5);
    GPIO_ResetBits(GPIOA,GPIO_Pin_11);
    GPIO_ResetBits(GPIOA,GPIO_Pin_12);


}

uint8_t hongwai_get_1(void){
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11);
}
uint8_t hongwai_get_2(void){
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
}
uint8_t hongwai_get_3(void){
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12);
}
uint8_t hongwai_get_4(void){
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);
}

void Edge_detect(void){
    // 读取红外信号值
    t1=hongwai_get_1();
    t2=hongwai_get_2();
    t3=hongwai_get_3();
    t4=hongwai_get_4();

    // 进行判断,输入低电平,表示有障碍物,因为是边沿检测,到没有障碍物时表示快掉下去了
    // 前方是悬崖
    if(t1==1){
        // 向后移动
        move_behind();

        t1=0;
    }
    if(t2==1){
        move_forward();

        t2=0;
    }
    // 左侧有悬崖
    if(t3==1){
        move_right_hw();
        move_forward();
        move_right_hw();
        move_forward();
        t3=0;
    }
    if(t4==1){
        move_left_hw();
        move_forward();
        move_left_hw();
        move_forward();

        t4=0;
    }
}
